﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DataTypes;

namespace Persistencia
{
    public class PersistenciaEmpleados
    {
        public void AltaPersonal(DataPersonal personal)
        {
            string nombre = personal.Nombre;
            string apellido = personal.Apellido;
            string sexo = personal.Sexo;
            int tel = personal.Telefono;
            string ci = personal.Ci;
            string domicilio = personal.Domicilio;
            float sueldo = personal.Salario;
            DateTime fecNac = personal.FecNac;
            DateTime fecAlta = personal.FecAlta;
            DateTime fecBaja = personal.FecBaja;
            Enumerados.Roles rol = personal.Rol;
            string usuario = personal.Usuario;
            string password = personal.Password;
            bool esActivo = personal.EsActivo;

            

            // Guardo los datos del empleado en la tabla Empleados
            AltaEmpleado(nombre, apellido, ci, domicilio, tel, sexo, fecNac, fecAlta, sueldo, fecBaja, usuario, password, rol, esActivo);

            

            // Guardo los datos de Personal en la tabla Personal
            int idEmpleado = obtenerIdEmpleado(ci);
            string consulta = "insert into Personal (idEmpleado,salario) values (" + idEmpleado + "," + sueldo + ");";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void AltaConductor(DataConductor conductor)
        {
            string nombre = conductor.Nombre;
            string apellido = conductor.Apellido;
            string sexo = conductor.Sexo;
            int tel = conductor.Telefono;
            string ci = conductor.Ci;
            string domicilio = conductor.Domicilio;
            float comision = conductor.Comision;
            DateTime fecNac = conductor.FecNac;
            DateTime fecAlta = conductor.FecAlta;
            DateTime fecBaja = conductor.FecBaja;
            Enumerados.Roles rol = conductor.Rol;
            string usuario = conductor.Usuario;
            string password = conductor.Password;
            Boolean esActivo = conductor.EsActivo;

            // Guardo los datos del empleado en la tabla Empleados
            AltaEmpleado(nombre, apellido, ci, domicilio, tel, sexo, fecNac, fecAlta, comision, fecBaja, usuario, password, rol, esActivo);

            // Guardo los datos de Personal en la tabla Personal
            int idEmpleado = obtenerIdEmpleado(ci);

            string consulta = "insert into Choferes (idEmpleado,comision) values (" + idEmpleado + "," + comision + ");";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public DataPersonal ObtenerPersonal(string cedula)
        {            
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "SELECT nombre, apellido, sexo, telefono, domicilio, sueldo, fechaNac, alta, baja, rol, usuario, password, esactivo from Empleados where cedula = '" + cedula + "';";

            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            string nombre = "";
            string apellido = "";
            string sexo = "";
            int telefono = 0;
            string domicilio = "";
            float sueldo = 0;
            DateTime fechaNac = DateTime.MinValue;
            DateTime alta = DateTime.MinValue;
            DateTime baja = DateTime.MinValue;
            string rol = "";
            string usuario = "";
            string password = "";
            int esactivo = 0;

            while (objReader.Read())
            {
                nombre = Convert.ToString(objReader["nombre"]);
                apellido = Convert.ToString(objReader["apellido"]);
                sexo = Convert.ToString(objReader["sexo"]);
                telefono = Convert.ToInt32(objReader["telefono"]);
                domicilio = Convert.ToString(objReader["domicilio"]);
                sueldo = (float)Convert.ToDecimal(objReader["sueldo"]);
                fechaNac = Convert.ToDateTime(objReader["fechaNac"]);
                alta = Convert.ToDateTime(objReader["alta"]);
                baja = Convert.ToDateTime(objReader["baja"]);
                rol = Convert.ToString(objReader["rol"]);
                usuario = Convert.ToString(objReader["usuario"]);
                password = Convert.ToString(objReader["password"]);
                esactivo = Convert.ToInt32(objReader["esactivo"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);

            // obtengo el salario del empleado personal (de la tabla Personal)
            int idEmpleado = obtenerIdEmpleado(cedula);
            //Creo un objeto Command.
            myConnection = accesoBD.ConectarBD();
            consulta = "select salario from Personal where idEmpleado = " + idEmpleado + ";";
            myCommand = new SqlCommand(consulta, myConnection);
            objReader = myCommand.ExecuteReader();
            float salario = 0;
            while (objReader.Read())
            {
                salario = Convert.ToSingle(objReader["salario"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);

            Enumerados.Roles Rol = Enumerados.Roles.SOCIO;
            switch (rol)
            {
                case "ADMINISTRADOR":
                    Rol = Enumerados.Roles.ADMINISTRADOR;
                    break;
                case "TESORERO":
                    Rol = Enumerados.Roles.TESORERO;
                    break;
                case "SOCIO":
                    Rol = Enumerados.Roles.SOCIO;
                    break;
            }
            bool esActivo = (esactivo == 1);

            DataPersonal personal = new DataPersonal(nombre, apellido, cedula, domicilio, telefono, sexo, fechaNac, alta, sueldo, baja, usuario, password, Rol, salario, esActivo);
            personal.EsActivo = esActivo;
            return personal;            
        }

        public DataConductor ObtenerConductor(string cedula)
            //PRE: el conductor existe y es conductor
        {
            string nombre = "";
            string apellido = "";
            string sexo = "";
            int telefono = 0;
            string domicilio = "";
            float sueldo = 0;
            DateTime fechaNac = DateTime.MinValue;
            DateTime alta = DateTime.MinValue;
            DateTime baja = DateTime.MinValue;
            string rol = "";
            string usuario = "";
            string password = "";
            int esactivo = 0;
            bool esActivo = false;

            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "SELECT nombre, apellido, sexo, telefono, domicilio, sueldo, fechaNac, alta, baja, rol, usuario, password, esactivo from Empleados where cedula = '" + cedula + "';";
            //string consulta = "select e.nombre as nombre, e.apellido as apellido ,e.sexo as sexo, e.telefono as telefono, e.domicilio as domicilio, e.sueldo as sueldo, e.fechaNac as fechaNac, e.alta as alta, e.baja as baja, e.rol as rol, e.usuario as usuario, e.password as password, e.esactivo as esactivo from Empleados e, Choferes ch where e.idEmpleado = ch.idEmpleado and e.cedula = '" + cedula + "';";

            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
           
            while (objReader.Read()){            
                nombre = Convert.ToString(objReader["nombre"]);
                apellido = Convert.ToString(objReader["apellido"]);
                sexo = Convert.ToString(objReader["sexo"]);
                telefono = Convert.ToInt32(objReader["telefono"]);
                domicilio = Convert.ToString(objReader["domicilio"]);
                sueldo = (float)Convert.ToDecimal(objReader["sueldo"]);
                fechaNac = Convert.ToDateTime(objReader["fechaNac"]);
                alta = Convert.ToDateTime(objReader["alta"]);
                baja = Convert.ToDateTime(objReader["baja"]);
                rol = Convert.ToString(objReader["rol"]);
                usuario = Convert.ToString(objReader["usuario"]);
                password = Convert.ToString(objReader["password"]);
                esactivo = Convert.ToInt32(objReader["esactivo"]);
                if (esactivo == 1)
                    esActivo = true;
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);

            // obtengo el salario del empleado personal (de la tabla Personal)
            int idEmpleado = obtenerIdEmpleado(cedula);
            //Creo un objeto Command.
            myConnection = accesoBD.ConectarBD();
            consulta = "select comision from Choferes where idEmpleado = " + idEmpleado + ";";
            myCommand = new SqlCommand(consulta, myConnection);
            objReader = myCommand.ExecuteReader();
            float comision = 0;
            while (objReader.Read())
            {
                comision = Convert.ToSingle(objReader["comision"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);

            Enumerados.Roles Rol = Enumerados.Roles.SOCIO;
            switch (rol)
            {
                case "ADMINISTRADOR":
                    Rol = Enumerados.Roles.ADMINISTRADOR;
                    break;
                case "TESORERO":
                    Rol = Enumerados.Roles.TESORERO;
                    break;
                case "SOCIO":
                    Rol = Enumerados.Roles.SOCIO;
                    break;
            }          
            
            DataConductor conductor = new DataConductor(nombre, apellido, cedula, domicilio, telefono, sexo, fechaNac, alta, sueldo, baja, usuario, password, Rol, comision, esActivo);
            conductor.EsActivo = esActivo;
            return conductor;
        }

        public void ModificarDatosPersonal(DataPersonal dataPersonalNuevo, string cedula)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            // obtengo el salario del empleado personal (de la tabla Personal)
            int idEmpleado = obtenerIdEmpleado(cedula);

            string nombre = dataPersonalNuevo.Nombre;
            string apellido = dataPersonalNuevo.Apellido;
            string sexo = dataPersonalNuevo.Sexo;
            int telefono = dataPersonalNuevo.Telefono;
            string domicilio = dataPersonalNuevo.Domicilio;
            float sueldo = dataPersonalNuevo.Salario;
            DateTime fechaNac = dataPersonalNuevo.FecNac;
            DateTime alta = dataPersonalNuevo.FecAlta;
            DateTime baja = dataPersonalNuevo.FecBaja;
            Enumerados.Roles _rol = dataPersonalNuevo.Rol;
            string rol = _rol.ToString();    
            string usuario = dataPersonalNuevo.Usuario;
            string password = dataPersonalNuevo.Password;
            bool esactivo = dataPersonalNuevo.EsActivo;
            string ci = dataPersonalNuevo.Ci;
            int esActivo = 1;

            if (!esactivo)
                esActivo = 0;

            string consulta = "UPDATE Empleados SET nombre = '" + nombre + "', apellido = '" + apellido + "', cedula = '" + ci + "', domicilio = '" + domicilio + "', telefono = " + telefono + ", sexo = '" + sexo + "', fechaNac = " + fechaNac.ToString("yyyy-MM-dd") + ", alta = " + alta.ToString("yyyy-MM-dd") + ", sueldo = " + sueldo + ", baja = " + baja.ToString("yyyy-MM-dd") + ", usuario ='" + usuario + "', password = '" + password + "', Rol = '" + rol + "', esActivo =" + esActivo + " WHERE idEmpleado = " + idEmpleado + ";";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);

            // modifico el salario en la tabla Personal
            float salario = dataPersonalNuevo.Salario;
            myConnection = accesoBD.ConectarBD();
            consulta = "UPDATE Personal SET salario = " + salario + " WHERE idEmpleado = " + idEmpleado;
            myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void ModificarDatosConductor(DataConductor dataConductorNuevo, string cedula)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            // obtengo el salario del empleado personal (de la tabla Personal)
            int idEmpleado = obtenerIdEmpleado(cedula);

            //string consulta = "UPDATE Empleados SET nombre = '" + nombre + "' WHERE cedula = '" + cedula + "';";
            string nombre = dataConductorNuevo.Nombre;
            string apellido = dataConductorNuevo.Apellido;
            string sexo = dataConductorNuevo.Sexo;
            int telefono = dataConductorNuevo.Telefono;
            string domicilio = dataConductorNuevo.Domicilio;
            float sueldo = dataConductorNuevo.Comision;
            DateTime fechaNac = dataConductorNuevo.FecNac;
            DateTime alta = dataConductorNuevo.FecAlta;
            DateTime baja = dataConductorNuevo.FecBaja;
            Enumerados.Roles _rol = dataConductorNuevo.Rol;
            string rol = _rol.ToString();
            string usuario = dataConductorNuevo.Usuario;
            string password = dataConductorNuevo.Password;
            bool esactivo = dataConductorNuevo.EsActivo;
            string ci = dataConductorNuevo.Ci;
            int esActivo = 1;

            if (!esactivo)
                esActivo = 0;

            string consulta = "UPDATE Empleados SET nombre = '" + nombre + "', apellido = '" + apellido + "', cedula = '" + ci + "', domicilio = '" + domicilio + "', telefono = " + telefono + ", sexo = '" + sexo + "', fechaNac = '" + fechaNac.ToString("yyyy-MM-dd") + "', alta = '" + alta.ToString("yyyy-MM-dd") + "', sueldo = " + sueldo + ", baja= '" + baja.ToString("yyyy-MM-dd") + "', usuario ='" + usuario + "', password = '" + password + "', Rol = '" + rol + "', esActivo =" + esActivo + " WHERE idEmpleado = " + idEmpleado + ";";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);

            // modifico la comision en la tabla Choferes
            float comision = dataConductorNuevo.Comision;
            myConnection = accesoBD.ConectarBD();
            consulta = "UPDATE Choferes SET comision = " + comision + " WHERE idEmpleado = " + idEmpleado;
            myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void EliminarPersonal(string cedula)
        {
            // Elimino al empleado de la tabla Personal
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            int idEmpleado = obtenerIdEmpleado(cedula);
            string consulta = "DELETE FROM Personal WHERE idEmpleado = " + idEmpleado + ";";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);

            // Elimino al empleado de la tabla Empleados
            myConnection = accesoBD.ConectarBD();
            consulta = "DELETE FROM Empleados WHERE idEmpleado = " + idEmpleado + ";";
            myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void EliminarConductor(string cedula)
        {
            // Elimino al empleado de la tabla Personal
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            int idEmpleado = obtenerIdEmpleado(cedula);
            string consulta = "DELETE FROM Choferes WHERE idEmpleado = " + idEmpleado + ";";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);

            // Elimino al empleado de la tabla Empleados
            myConnection = accesoBD.ConectarBD();
            consulta = "DELETE FROM Empleados WHERE idEmpleado = " + idEmpleado + ";";
            myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        
        public bool ExisteDataEmpleado(string cedula)
        {
            bool existeCoche = false;
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "select * from Empleados where cedula = '" + cedula + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            while (objReader.Read() && !existeCoche)
            {
                existeCoche = objReader != null;
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return existeCoche;
        }

        public bool ValidarUsuario(string usuario, string password)
        {
            bool esValidoUsuario = false;
            string query = "SELECT Count(*) FROM Empleados WHERE usuario = '" + usuario + "' and password = '" + password + "';";      
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(query, myConnection);
            int objReader = (int) myCommand.ExecuteScalar();

            //0 no existe el usuario con esa clave, 1 si existe
            if (objReader > 0)
                esValidoUsuario = true;

            Console.WriteLine(objReader);
            accesoBD.DesconectarBD(myConnection);
            return esValidoUsuario;
        }

        public List<DataConductor> ListarConductores()
        {
            string nombre = "";
            string apellido = "";
            string sexo = "";
            int telefono = 0;
            string cedula = "";
            string domicilio = "";
            float sueldo = 0;
            DateTime fechaNac = DateTime.MinValue;
            DateTime alta = DateTime.MinValue;
            DateTime baja = DateTime.MinValue;
            string rol = "";
            string usuario = "";
            string password = "";
            int esactivo = 0;
            float comision = 0;

            List<DataConductor> listaConductores = new List<DataConductor>();
            string consulta = "select e.nombre as nombre, e.apellido as apellido ,e.sexo as sexo, e.telefono as telefono, e.cedula as cedula, e.domicilio as domicilio, e.sueldo as sueldo, e.fechaNac as fechaNac, e.alta as alta, e.baja as baja, e.rol as rol, e.usuario as usuario, e.password as password, e.esactivo as esactivo, ch.comision as comision from Empleados e, Choferes ch where e.idEmpleado = ch.idEmpleado;";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            while (objReader.Read())
            {
                nombre = Convert.ToString(objReader["nombre"]);
                apellido = Convert.ToString(objReader["apellido"]);
                sexo = Convert.ToString(objReader["sexo"]);
                telefono = Convert.ToInt32(objReader["telefono"]);
                cedula = Convert.ToString(objReader["cedula"]);
                domicilio = Convert.ToString(objReader["domicilio"]);
                sueldo = (float)Convert.ToDecimal(objReader["sueldo"]);
                fechaNac = Convert.ToDateTime(objReader["fechaNac"]);
                alta = Convert.ToDateTime(objReader["alta"]);
                baja = Convert.ToDateTime(objReader["baja"]);
                rol = Convert.ToString(objReader["rol"]);
                Enumerados.Roles Rol = Enumerados.Roles.ADMINISTRADOR; ;
                if (rol == "ADMINISTRADOR")
                    Rol = Enumerados.Roles.ADMINISTRADOR;
                if (rol == "TESORERO")
                    Rol = Enumerados.Roles.TESORERO;
                if (rol == "SOCIO")
                    Rol = Enumerados.Roles.SOCIO;

                usuario = Convert.ToString(objReader["usuario"]);
                password = Convert.ToString(objReader["password"]);
                esactivo = Convert.ToInt32(objReader["esactivo"]);
                bool _esactivo = false;
                if (esactivo == 1)
                    _esactivo = true;
                comision = (float)Convert.ToDecimal(objReader["comision"]); 

                DataConductor dataConductor = new DataConductor(nombre, apellido, cedula, domicilio, telefono, sexo, fechaNac, alta, sueldo, baja, usuario, password, Rol, comision, _esactivo);
                dataConductor.EsActivo = _esactivo;
                listaConductores.Add(dataConductor);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return listaConductores;
        }

        public List<DataPersonal> ListarPersonales()
        {
            string nombre = "";
            string apellido = "";
            string sexo = "";
            int telefono = 0;
            string cedula = "";
            string domicilio = "";
            float sueldo = 0;
            DateTime fechaNac = DateTime.MinValue;
            DateTime alta = DateTime.MinValue;
            DateTime baja = DateTime.MinValue;
            string rol = "";
            string usuario = "";
            string password = "";
            int esactivo = 0;
            float salario = 0;

            List<DataPersonal> listaPersonales = new List<DataPersonal>();
            string consulta = "select e.nombre as nombre, e.apellido as apellido ,e.sexo as sexo, e.telefono as telefono, e.cedula as cedula, e.domicilio as domicilio, e.sueldo as sueldo, e.fechaNac as fechaNac, e.alta as alta, e.baja as baja, e.rol as rol, e.usuario as usuario, e.password as password, e.esactivo, p.salario as salario from Empleados e, Personal p where e.idEmpleado = p.idEmpleado;";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            while (objReader.Read())
            {
                nombre = Convert.ToString(objReader["nombre"]);
                apellido = Convert.ToString(objReader["apellido"]);
                sexo = Convert.ToString(objReader["sexo"]);
                telefono = Convert.ToInt32(objReader["telefono"]);
                cedula = Convert.ToString(objReader["cedula"]);
                domicilio = Convert.ToString(objReader["domicilio"]);
                sueldo = (float)Convert.ToDecimal(objReader["sueldo"]);
                fechaNac = Convert.ToDateTime(objReader["fechaNac"]);
                alta = Convert.ToDateTime(objReader["alta"]);
                baja = Convert.ToDateTime(objReader["baja"]);
                rol = Convert.ToString(objReader["rol"]);
                Enumerados.Roles Rol = Enumerados.Roles.ADMINISTRADOR; ;
                if (rol == "ADMINISTRADOR")
                    Rol = Enumerados.Roles.ADMINISTRADOR;
                if (rol == "TESORERO")
                    Rol = Enumerados.Roles.TESORERO;
                if (rol == "SOCIO")
                    Rol = Enumerados.Roles.SOCIO;

                usuario = Convert.ToString(objReader["usuario"]);
                password = Convert.ToString(objReader["password"]);
                esactivo = Convert.ToInt32(objReader["esactivo"]);
                bool _esactivo = false;
                if (esactivo == 1)
                    _esactivo = true;
                salario = (float)Convert.ToDecimal(objReader["salario"]);

                DataPersonal dataPersonal = new DataPersonal(nombre, apellido, cedula, domicilio, telefono, sexo, fechaNac, alta, sueldo, baja, usuario, password, Rol, salario, _esactivo);
                dataPersonal.EsActivo = _esactivo;
                listaPersonales.Add(dataPersonal);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return listaPersonales;
        }
        

        public void ModificarContraseniaEmpleado(string usuario, string passNuevo)
        {
            string consulta = "update Empleados set password = '" + passNuevo + "' where usuario = '" + usuario + "';";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);

        }

        public string ObtenerRolEmpleado(string usuario)
            //PRE: el usuario existe
        {
            string rol = "";
            string consulta ="select rol from Empleados where usuario = '" + usuario + "'";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
            while (objReader.Read())
            {
                rol = Convert.ToString(objReader["rol"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return rol;
        }

        ////////////// --  M E T O D O S   A U X I L I A R E S  -- ////////////////////////////////////////////////////////////////////

        public int obtenerIdEmpleado(string cedula)
        {
            int idEmpleado = 0;
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "select idEmpleado from Empleados where cedula = '" + cedula + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
            while (objReader.Read())
            {
                idEmpleado = Convert.ToInt32(objReader["idEmpleado"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return idEmpleado;
        }

        private void AltaEmpleado(string nombre, string apellido, string ci, string domicilio, int telefono, string sexo,
            DateTime fecNac, DateTime fecAlta, float sueldo, DateTime fecBaja, string usuario, string password, Enumerados.Roles rol, Boolean esActivo)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            int activo = 0;
            if (esActivo)
                activo = 1;
  
            string consulta = "INSERT INTO Empleados (nombre, apellido, sexo, telefono, cedula, domicilio, sueldo, fechaNac, alta, baja, rol, usuario, password, esActivo) VALUES ('" + nombre + "','" + apellido + "','" + sexo + "'," + telefono + ",'" + ci + "','" + domicilio + "'," + sueldo + "," + fecNac.ToString("yyyy-MM-dd") + "," + fecAlta.ToString("yyyy-MM-dd") + "," + fecBaja.ToString("yyyy-MM-dd") + ",'" + rol.ToString() + "','" + usuario + "','" + password + "'," + activo + ");";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void CambiarEstadoEmpleado(String ci, bool estado)
        {

            int esActivo = 0;
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            if (!estado)
            {
                esActivo = 0;
            }
            else {
                esActivo = 1;
            }

            string consulta = "UPDATE Empleados SET esactivo = '" + esActivo + "' WHERE cedula = '" + ci + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

    }


    
}
